<?php
/**
 * 
 */
class Pub_Model_Publisher extends Zend_Db_Table_Abstract 
{
    protected $_name = 'sites';
    
    /**
     * Выборка всех данных выбранного сайта:
     * url, category, status
     * @param int $id - id публикатора
     * @return array 
     */
    public function getAllPublisherSites($id) {
        $db = $this->getDefaultAdapter();
        $select = $db->select()
                ->from(array('s' => 'sites'))
                ->join(array('c' => 'category_site_child'), 'c.id = s.id_category_site', array('c.name'))
                ->join(array('su' => 'status_users'), 's.id_status = su.id', array('status' => 'su.name'))                
                ->where('id_publisher =?', $id);
        return $db->fetchAll($select);
    }
    
    /**
     * Выборка всех активных на данный момент сайтов
     * текущего публикатора
     * @param int $id - id публикатора
     * @return array 
     */
    public function getAllPubActiveSites($id) {
        $this->_name = 'sites';
        $select = $this->select()
                       ->from($this->_name)
                       ->where('id_publisher =?', intval($id))
                       ->where('id_status = 1');
        return $this->fetchAll($select)->toArray();        
    }

    /**
     * Удаление выбранного сайта
     * @param int $id - id сайта
     */
    public function deleteSelectSite($id) {
        $this->_name = 'sites';
        $this->delete('id =' . intval($id));
    }
    
    /**
     * Удаление ключевых слов выбранного сайта
     * @param int $id - id сайта
     */
    public function deleteSiteKeywords($id) {
        $this->_name = 'site_keywords';
        $this->delete('id_site =' . intval($id));
    }
    
    /**
     * Выборка всех родительских категорий тем сайта
     * @return array 
     */
    public function getAllParentCategories() {
        $this->_name = 'category_site_parent';
        $select = $this->select()
                       ->from($this->_name);
        return $this->fetchAll($select)->toArray();
    }
    
    /**
     * Выборка всех дочерних категорий тем сайта
     * @param int $id_parent - id родительской категории тем
     * @return array 
     */
    public function getAllChildCategories($id_parent) {
        $this->_name = 'category_site_child';
        $select = $this->select()
                       ->from($this->_name)
                       ->where('id_parent =?', intval($id_parent));
        return $this->fetchAll($select)->toArray();
    }

    /**
     * получаем информацию о публикаторе
     * @param int $id - id публикатора
     * @return array 
     */
    public function showProfile($id) {
        $this->_name = 'publishers';
        $select = $this->select()->from($this->_name)
                ->where('id = ?', intval($id));
        return $this->fetchRow($select)->toArray();

    }
    /**
     * редактирование профиля
     * @param int $id - id публикатора
     * @param array $data - массив данных для обновления
     */
    public function updateProfile($id, $data) {
        $this->_name ='publishers';
        $this->update($data, 'id =' . intval($id));
    }
    
    /**
     * Записываем данные нового сайта в таблицу 'sites'
     * и возвращаем его id
     * @param array $data - массив данных для записи
     * @return int - последний записанный id
     */
    public function addSite($data) {
        $this->_name = 'sites';
        $this->insert($data);
        return $this->getAdapter()->lastInsertId();
    }
    
    /**
     * Записываем данные нового ключевого слова
     * в таблицу 'keywords' и возращаем его id
     * @param array $data - массив данных для записи
     * @return int  - последний записанный id
     */
    public function addKeyword($data) {
        $this->_name = 'keywords';
        $this->insert($data);        
        return $this->getAdapter()->lastInsertId();
    }
    
    /**
     * Записываем в таблицу 'site_keywords' 
     * id сайта & id ключевого слова, тем самым создавая
     * связь между сайтом и его ключевыми словами
     * @param array $data - массив данных для записи
     * @return int - последний записанный id
     */
    public function addKeywordToSite($data) {
        $this->_name = 'site_keywords';
        $this->insert($data);
        return $this->getAdapter()->lastInsertId();
    }
    
    /**
     * Выборка всех записей, у которых
     * ключевое слово равно переданному
     * @param char $key - ключевое слово для поиска в базе
     * @return array 
     */
    public function getSimilarKeywords($key) {
        $this->_name = 'keywords';
        $select = $this->select()
                     ->from($this->_name)
                     ->where('name LIKE ?', $key.'%');
        return $this->fetchAll($select)->toArray();
    }
    
    /**
     * Выборка всех ключевых слов указанного сайта
     * @param int $id - id сайта
     * @return array 
     */
    public function getAllSiteKeywords($id) {
        $db = $this->getDefaultAdapter();
        $select = $db->select()
                     ->from(array('sk' => 'site_keywords'))
                     ->join(array('k' => 'keywords'),
                                  'sk.id_keyword = k.id',
                            array('k.name'))
                     ->where('sk.id_site =?', intval($id));
        return $db->fetchAll($select);
    }
    /**
     * текущий счет публикатора
     * @param int $id - id публикатора
     * @return array
     */
    public function getAccount($id) {
        $this->_name = 'publishers';
        $select = $this->select()->from($this->_name)
                ->where('id = ?', intval($id));
        return $this->fetchRow($select)->toArray();
    }
    /**
     * получение информации о транзакциях публикатора 
     * @param int $id - id публикатора
     * @return array
     */
    public function getTransaction($id) {
        $this->_name = 'transactions_publishers';
        $select = $this->select()->from($this->_name)
                ->where('id_publisher = ?', intval($id));
        return $this->fetchAll($select)->toArray();
    }
    
    /**
     * Выборка всех данных указанного сайта
     * @param int $id - id сайта
     * @return array 
     */
    public function getSelectSite($id) {
        $db = $this->getDefaultAdapter();
        $select = $db->select()
                       ->from(array('s' => 'sites'))
                       ->join(array('csc' => 'category_site_child'), 
                                    's.id_category_site = csc.id',
                              array('category' => 'csc.name'))
                       ->join(array('su' => 'status_users'),
                                    's.id_status = su.id',
                              array('status' => 'su.name'))                              
                       ->where('s.id =?', intval($id));
        return $db->fetchAll($select);
    }
    
    /**
     * Выборка всех рекламных мест указанного сайта
     * @param int $id - id сайта
     * @return array 
     */
    public function getSiteAdvSpaces($id) {
        $db = $this->getDefaultAdapter();
        $select = $db->select()
                     ->from(array('as' => 'advertising_spaces'))
                     ->join(array('at' => 'adver_types'),
                                  'as.id_type_adver = at.id',
                            array('at.type'))
                     ->join(array('su' => 'status_users'),
                                  'as.id_status = su.id',
                            array('status' => 'su.name'))
                     ->where('as.id_site =?', intval($id));
        return $db->fetchAll($select);
    }
    
    /**
     * Выборка данных указанного рекламного места
     * @param int $id - id рекламного места
     * @return array 
     */
    public function getSelectAdvSpace($id) {
        $db = $this->getDefaultAdapter();
        $select = $db->select()
                     ->from(array('as' => 'advertising_spaces'))
                     ->join(array('at' => 'adver_types'),
                                  'as.id_type_adver = at.id',
                            array('at.type'))
                     ->join(array('su' => 'status_users'),
                                  'as.id_status = su.id',
                            array('status' => 'su.name'))
                     ->where('as.id =?', intval($id));
        return $db->fetchAll($select);
    }
    
    /**
     * Удаление указанного рекламного места
     * @param int $id - id рекламного места
     */
    public function deleteAdvSpace($id) {
        $this->_name = 'advertising_spaces';
        $this->delete('id =' . intval($id));
    }
    
    /**
     * Изменение статуса выбранного рекламного места
     * Активация/деактивация
     * @param int $id - id рекламного места
     * @param array $data - массив данных для обновления
     */
    public function changeModeAdvSpace($id, $data) {
        $this->_name = 'advertising_spaces';
        $this->update($data, 'id =' . intval($id));
    }    
    
    /**
     * Выборка всех рекламных типов
     * @return array 
     */
    public function getAllAdvTypes() {
        $this->_name = 'adver_types';
        $select = $this->select()
                       ->from($this->_name);
        return $this->fetchAll($select)->toArray();
    }

    /**
     * Выборка всех кейвордов указанного сайта
     * @param int $id_site - id выбранного сайта
     * @return array 
     */
    public function getKeyWordsByIdSite($id_site) {
        $this->_name = 'keywords';
        $select = $this->select()
                       ->from($this->_name)    
                       ->join("site_keywords", 'keywords.id = site_keywords.id_keyword', array('keywords.name'))                       
                       ->where('site_keywords.id_site = ?', $id_site)
                       ->setIntegrityCheck(false);                                
        return $this->fetchAll($select)->toArray();
    }
    
    
}
    